/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.uam.ayd.dulceria.persistencia.dao;

import java.util.List;
import java.util.ArrayList;

import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;

import mx.uam.ayd.dulceria.dominio.Producto;
import mx.uam.ayd.dulceria.dominio.Venta;
import mx.uam.ayd.dulceria.persistencia.ManejadorBD;

/**
 *
 * @author christian
 */
public class VentaDAO_Derby implements VentaDAO{

    public VentaDAO_Derby(){

    }


    public boolean crea(Venta v) {
        try{
            Statement sentencia = ManejadorBD.dameConnection().createStatement();
            String nombreProducto = v.getProducto().getNombre();
            System.out.println(nombreProducto);
            //recuperar el producto asociado
            ResultSet rs = sentencia.executeQuery("SELECT * FROM Productos WHERE nombre='"+nombreProducto.toLowerCase()+"'");
            if(!rs.next()){
            	System.out.println("No se pudo recuperar el producto en la venta");
            	return false;
            }
            int idProducto = rs.getInt("id");
            int idventa = obtenerUltimoIndice()+1;
            sentencia.execute("INSERT INTO "
                    + "Ventas(id, producto_id, cantidad, total, fecha)"
                    + " VALUES("+idventa+","+idProducto+","+v.getCantidad()+","+v.getTotal()+",'"+v.getFecha()+"')");
            return true;
        }catch(SQLException e){
        	e.printStackTrace();
            return false;
        }
    }


    public boolean actualiza(Venta v) {
        throw new UnsupportedOperationException("Not supported yet.");
    }


    public boolean elimina(Venta v) {
        throw new UnsupportedOperationException("Not supported yet.");
    }


    public List<Venta> recuperaTodos() {
    	ArrayList<Venta> ventas=new ArrayList<Venta>();
    	ProductoDAO pDAO=FabricaDAO.creaProductoDAO();
    	try{
    		Statement sentencia = ManejadorBD.dameConnection().createStatement();

    		ResultSet rs = sentencia.executeQuery("SELECT * FROM Ventas");

    		while(rs.next()){
    			int id = rs.getInt("producto_id");
    			Producto p = pDAO.recupera(id);
    			Venta v = new Venta(p,rs.getInt("cantidad"),rs.getString("fecha"));
    			ventas.add(v);
    		}
    		return ventas;
    	}catch(SQLException e){
    		e.printStackTrace();
    		return null;
    	}
    }

    private int obtenerUltimoIndice(){
    	try{
            Statement sentencia = ManejadorBD.dameConnection().createStatement();
            ResultSet rs = sentencia.executeQuery("SELECT id FROM Ventas ORDER BY id DESC");

            if(!rs.next())
            {
                return 0;
            }
            return rs.getInt(1);
        }catch(SQLException e){
        	e.printStackTrace();
            return 0;
        }
    }
}
